main() {
  //  类的实例化：创建一个类的对象
  //  new 关键字：创建一个新的类对象,给对象初始化赋值，返回新对象
  //  构造函数：类的特殊方法，用于创建对象
  Crush lwx = new Crush();
  lwx.name = '.en';
  lwx.age = 19;
  lwx.sex = '男';
  lwx.sayHello();
  print(lwx.name);
  print(lwx.age);
  print(lwx.sex);

  //  类的实例化：创建一个类的对象
  //  构造函数：类的特殊方法，用于创建对象
  Crush lwx2 = new Crush.Person(name: '奕白白白白', age: 16);
  lwx2.sayHello();
  print(lwx2.name);
  print(lwx2.age);
  print(lwx2.sex);

  Crush lwx3 = new Crush(name: '刘文鑫', age: 16, sex: '男');
  lwx3.sayHello();
  print(lwx3.name);
  print(lwx3.age);
  print(lwx3.sex);
}

//类的基础用法
class Crush {
  // 1. 定义属性
  String? name;
  int? age;
  String? sex;

  // 构造函数：类的特殊方法，用于创建对象————主构造函数，跟类名同名
  Crush({String? name, int? age, String? sex}) {
    print('主构造函数,被调用了啊');
    this.name = name;
    this.age = age;
    this.sex = sex;
  }
  //主构造函数简化
  // Crush(this.name, this.age, this.sex);

  //  次构造函数(命名)
  Crush.Person({String? name, int? age}) {
    print('次构造函数,被调用了啊');
    this.name = name;
    this.age = age;
    this.sex = '未知';
  }
  //次构造函数简化
  Crush.Person2(this.name, this.age) : this.sex = '未知';

  // 2. 定义方法(相当于定义函数)
  void sayHello() {
    print('你好，我是$name，我今年$age岁，我是$sex生');
  }
}
